package com.czg.jsonschema2lombokpojo.rules;

import com.czg.jsonschema2lombokpojo.exception.GenerationException;

import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JPrimitiveType;
import com.sun.codemodel.JType;

/**
 * 用于在代码生成期间检查和创建基本类型引用的帮助器。
 */
public final class PrimitiveTypes {

    private PrimitiveTypes() {
    }

    /**
     * 检查是否提供类型支持。
     * 
     * @param name
     *            Java类型的名称
     * @param owner
     *            类型生成的当前代码模型
     * @return <code>true</code>当给定的名称指的是一个基本的Java类型(例如：“int”)，否则<code>false</code>
     */
    public static boolean isPrimitive(String name, JCodeModel owner) {
        try {
            return JType.parse(owner, name) != owner.VOID;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }

    /**
     * 使用给定的基本类型创建（用于代码生成）。
     * 
     * @param name
     *            基本Java类型的名称
     * @param owner
     *            类型生成的当前代码模型
     * @return 由给定所有者创建的类型引用
     */
    public static JPrimitiveType primitiveType(String name, JCodeModel owner) {
        try {
            return (JPrimitiveType) owner.parseType(name);
        } catch (ClassNotFoundException e) {
            throw new GenerationException(
                    "Given name does not refer to a primitive type, this type can't be found: "
                            + name, e);
        }
    }

}
